package com.zhijian.medical.entity.vo.response;

import com.zhijian.medical.enums.NgsStatusEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;
import java.util.Objects;

/**
 * 二代测序主表 回显vo
 *
 * @author HCG
 * @version 1.0
 * @date 2022-08-23 14:59:59
 */
@Getter
@Api(tags = "二代测序主表回显vo")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class NgsVo implements Serializable {

    private static final long serialVersionUID = -1;

    /**
     * 主键id
     */
    @ApiModelProperty("主键id")
    private Long id;

    /**
     * 流程编号
     */
    @ApiModelProperty("流程编号")
    private String processNumber;

    /**
     * 名称
     */
    @ApiModelProperty("名称")
    private String name;

    /**
     * 开始时间
     */
    @ApiModelProperty("开始时间")
    private String startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty("结束时间")
    private String endTime;

    /**
     * 状态，0：准备，1：试剂配制区（片段化反应液及末端修复加A反应液配制），2：核酸制备区 ，3：
     * 文库制备区 （片段化），4：文库制备区 （末端修复&加A），5：文库制备区 （接头连接），6：文库富集区（文库富集） ，7：文库富集区（DNA文库混合及杂交），8：文库富集区（文库捕获），9：文库富集区（捕获文库富集及pooling），10：测序区（上机测序），11：数据分析（测序室、数据室）
     */
    @ApiModelProperty("状态，0：准备，1：试剂配制区（片段化反应液及末端修复加A反应液配制），2：核酸制备区 ，3： 文库制备区 （片段化），4：文库制备区 （末端修复&加A），5：文库制备区 （接头连接），6：文库富集区（文库富集） ，7：文库富集区（DNA文库混合及杂交），8：文库富集区（文库捕获），9：文库富集区（捕获文库富集及pooling），10：测序区（上机测序），11：数据分析（测序室、数据室） ")
    private Byte status;

    /**
     * 进度状态字符串
     */
    @ApiModelProperty("进度状态字符串")
    private String statusStr;

    /**
     * 操作者
     */
    @ApiModelProperty("操作者")
    private String operateUserName;

    /**
     * 检验日期
     */
    @ApiModelProperty("检验日期")
    private String date;

    /**
     * 样本
     */
    @ApiModelProperty("样本")
    private List<ExperimentProcessSampleVo> experimentProcessSampleList;

    public void setId(Long id) {
        this.id = id;
    }

    public void setProcessNumber(String processNumber) {
        this.processNumber = processNumber;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public void setEndTime(String endTime) {
        this.endTime = endTime;
    }

    public void setStatus(Byte status) {
        this.status = status;
    }

    public void setStatusStr(String statusStr) {
        if (Objects.isNull(this.status)) {
            this.statusStr = null;
            return;
        }
        NgsStatusEnum anEnum = NgsStatusEnum.getByCode(Integer.valueOf(this.status));
        this.statusStr = Objects.nonNull(anEnum) ? anEnum.getDesc() : null;
    }

    public void setOperateUserName(String operateUserName) {
        this.operateUserName = operateUserName;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public void setExperimentProcessSampleList(List<ExperimentProcessSampleVo> experimentProcessSampleList) {
        this.experimentProcessSampleList = experimentProcessSampleList;
    }
}